iT邦幫忙

2024 iThome 鐵人賽

DAY 3
1

在了解了 Kubernetes 的好處後,今天我們來更深入地看看 Kubernetes 的重要組成內容。

Kubernetes 的設計原理

根據 Kubernetes 實施細節中所述,Kubernetes 叢集的設計基於三個原則:

  • 安全:遵循最新的安全最佳實踐。
  • 易於使用:通過簡單的命令進行操作。
  • 可擴展:不偏向於某一個提供商,可通過組態檔案進行自訂。

Kubernetes 叢集中包含哪些元件?

https://ithelp.ithome.com.tw/upload/images/20240917/20168212WSX1Qo4uXA.png

一個完整的 Kubernetes 叢集由以下主要元件構成:

  • 控制平面組件 (Control Plane Components):位於主節點(Master Node),負責集群的管理和控制。
  • 節點組件 (Node Components):運行在工作節點(Worker Node)上,負責運行實際的應用容器(Pod)。
  • 插件和附加組件 (Add-ons):提供額外功能,如 DNS 和網路插件等。

讓我們更詳細地探究這些組件。

Kubernetes 元件

Node Components 節點組件

Node 節點

又叫工作節點計算節點。Kubernetes 叢集中至少需要一個計算節點,但通常會有多個計算節點。容器集經過調度和編排後會在節點上運行。如果需要擴展叢集的容量,就要新增更多的節點。

Pod 容器集

Pod 是 Kubernetes 對象模型中最小、最簡單的單元。它代表了應用的單個實例。每個 Pod 都由一個容器(Container)以及若干控制容器運行方式的選件組成。Pod 可以連接至持久儲存 (Persistent Storage) 以運行有狀態應用。

Container Runtime Engine 容器運行引擎

每個計算節點都有一個容器運行引擎來執行容器。Docker 是常見的選擇,但 Kubernetes 也支援其他符合開源容器運動(OCI)標準的執行階段,例如 rkt 和 CRI-O。值得注意的是,在 CNCF 認證考試中,默認使用的 Container Runtime 是 containerd

kubelet

kubelet 是每個節點上運行的代理,負責與控制平面通信。它確保 Pod 中的容器按照規格運行,並執行來自控制平面的指令。

kube-proxy

每個計算節點中都包含 kube-proxy,它是網絡代理,負責維護節點上的網絡規則,管理進入服務的網路流量並將其轉發到適當的 Pod。

kube-proxy 通常使用 iptables 或 IPVS 來實現這些轉發規則,以確保集群內部和外部的網路請求能夠正確路由到相應的 Pod。

Control Plane Components 控制平面組件

Control Plane 控制平面

控制平面是 Kubernetes 叢集的神經中樞,負責控制叢集的運行。這裡包含用於控制叢集的 Kubernetes 元件及一些有關叢集狀態和組態的資料。這些核心元件確保容器以足夠的數量和所需的資源運行,並一直保持與您的電腦聯絡,以確保叢集按照預期運行。

kube-apiserver

Kubernetes API 是控制平面的前端,用於處理內部和外部請求。所有對集群的操作都需要通過 API 服務器進行。API 伺服器會確定請求是否有效,如果有效,則對其進行處理。您可以通過 REST 呼叫、kubectl 命令列介面或其他命令列工具(例如 kubeadm)來訪問 API。

要快速查看可用的 API,可以使用以下命令啟動代理:

kubectl proxy
---
Starting to serve on 127.0.0.1:8001

然後訪問 127.0.0.1:8001 這個端口,查看 API 列表。

kube-scheduler

kube-scheduler 是 Kubernetes 的調度器,調度器負責將新創建的 Pod 分配到合適的節點上。它考慮因素包括資源需求、硬件/軟件/策略約束、親和性規則等,以做出最優的調度決策。

kube-controller-manager

Kubernetes 控制器 (Controller) 的主要功能是確保叢集的狀態始終符合期望。它們持續監控叢集中的資源,一旦發現實際狀態與期望狀態不符,就會採取相應的行動進行調整。Kubernetes 將多個控制器整合到單一進程中,即控制器管理器 (controller-manager),以減少資源消耗並方便統一管理。

一些重要的控制器如下:

  • Node Controller:監控節點健康狀況
  • Replication Controller:維護正確數量的 Pod 副本
  • Endpoints Controller:填充 Endpoints 對象(連接 Services & Pods)
  • Service Account & Token Controllers:為新的命名空間創建默認帳戶和 API 訪問令牌

實際上叢集包含了超過 30 個控制器,這些控制器與 Kubernetes 其他元件的協調合作便是確保叢集動起來的關鍵。

cloud-controller-manager 雲控制器管理器

某些控制器負責與底層雲服務提供商(如 AWS、GCP、Azure 等)進行交互,以管理 Kubernetes 集群中的資源。cloud-controller-manager 將雲特定的控制邏輯從 Kubernetes 的核心組件 kube-controller-manager 中分離出來,提供更好的可擴展性和靈活性。

常見的雲控制器包括:

  • Node Controller:管理節點的添加和移除,確保 Kubernetes 中的節點狀態與雲提供商的節點狀態一致。
  • Route Controller:管理路由資源,確保節點之間的通信可以通過雲提供商的路由進行。
  • Service Controller:管理負載均衡器,確保 Kubernetes 中的 Service 可以通過雲提供商的負載均衡器訪問。

在自建環境或本地電腦中運行 Kubernetes,不需要雲控制器管理器。

etcd

etcd 是 Kubernetes 的主資料庫,用於存儲所有集群數據。它是一個分布式鍵值存儲,設計用於可靠地存儲關鍵數據。定期備份 etcd 是災難恢復計劃的重要部分。

在一些輕量級的 Kubernetes 發行版中,可以選擇使用更熟悉的 SQLite 作為狀態存儲的替代方案。

小結

Kubernetes 的設計和實現包含了大量元件,且其內容龐大且快速增長。相信大家在初次接觸這些介紹時,可能和我一樣,無法完全理解其中的細節。在後續的主題介紹和實作練習中,我們會再次提及本篇提到的重要元件和概念,並通過實作來加深對它們的理解。


參考


上一篇
學 Kubernetes 的第二天 - Kubernetes 的前世今生
下一篇
學 Kubernetes 的第四天 - 建立 Kubernetes 叢集 - KinD
系列文
都什麼年代了,還在學 Kubernetes37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言